My portfolio¶

In [1]:
%load_ext autoreload
%autoreload 2
In [4]:
from src.domain import *

TOTAL = 1

large_us_stocks = {
    "VTI": 0.8,
    "VNQ (REIT)": 0.2
}

large_exus_stocks = {
    "EAFE": 1
}

small_us_stocks = {
    "IJS": 1
}

small_exus_stocks = {
    "EAFE Small-Cap": 1
}

bonds = {
    "BND": 1,
}

fund_shares = [large_us_stocks, large_exus_stocks, small_us_stocks, small_exus_stocks, bonds]

categories = SharesCategoriesDistribution(
        by_type=dict(zip((ShareType.Stock, ShareType.Bond), (0.75, 0.25))),
        by_region=dict(zip((Region.US, Region.ExUS), (0.7, 0.3))),
        by_cap=dict(zip((Cap.Large, Cap.Small), (0.7, 0.3))),
        by_term=dict(zip((Term.Long, ), (1, ))),
    )

distribution = SharesDistribution(
    categories=categories,
    funds=fund_shares
)



def assert_shares(obj):
    assert(sum(obj.values()) == TOTAL)

for shares in [categories.by_cap, categories.by_region, categories.by_term, categories.by_type] + fund_shares:
    assert_shares(shares)

###

flatten_stock_portfolio = []

stock_share = categories.by_type[ShareType.Stock]

for (region_key, region_value) in categories.by_region.items():
    for (cap_key, cap_value) in categories.by_cap.items():
        flatten_stock_portfolio.append({
            "region": region_key.value,
            "share": stock_share * region_value * cap_value,
            "cap": cap_key.value
        })
        
def sort_by_share(portfolio):
    return sorted(portfolio, key=lambda x: x["share"], reverse=True)
        
flatten_stock_portfolio = sort_by_share(flatten_stock_portfolio)
In [7]:
from collections import OrderedDict
import pandas as pd
from IPython.display import display
from src.portfolio import prepare_stock_table_rows, get_stock_name
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA

stocks_table = prepare_stock_table_rows(flatten_stock_portfolio)
    
df = pd.DataFrame(stocks_table, columns=['Share', 'Share of all'], index=[get_stock_name(x) for x in flatten_stock_portfolio])
display(df)

display_portfolio(distrib=distribution, extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
Share Share of all
Us Large-cap stocks 49.0% 36.75%
Us Small-cap stocks 21.0% 15.75%
Ex-us Large-cap stocks 21.0% 15.75%
Ex-us Small-cap stocks 9.0% 6.75%
Portfolio
VTI 29.4%
VNQ (REIT) 7.35%
EAFE 15.75%
IJS 15.75%
EAFE Small-Cap 6.75%
BND 25.0%
Mean ret. Std | Portfolio VTI BND
Portfolio 8.87% 11.14% | - 94.83% 14.21%
VTI 10.98% 15.55% | 94.83% - 16.64%
BND 6.72% 5.3% | 14.21% 16.64% -